#include <iostream>
#include <stack>
#include <vector>
using namespace std;

// 判断是否可以根据入栈序列生成出栈序列
string canPopSequence(int n, vector<int>& pushed, vector<int>& popped) {
    stack<int> s;  // 用于模拟栈
    int popIndex = 0;  // 追踪当前出栈元素的位置
    
    // 遍历入栈序列
    for (int i = 0; i < n; ++i) {
        s.push(pushed[i]);  // 入栈
        // 如果栈顶元素和当前出栈序列元素匹配，出栈
        while (!s.empty() && s.top() == popped[popIndex]) {
            s.pop();
            ++popIndex;
        }
    }
    
    // 如果栈为空，说明所有出栈操作都匹配成功
    return s.empty() ? "Yes" : "No";
}

int main() {
    int q;  // 查询次数
    cin >> q;
    
    while (q--) {
        int n;  // 序列长度
        cin >> n;
        
        vector<int> pushed(n), popped(n);
        
        for (int i = 0; i < n; ++i) {
            cin >> pushed[i];  // 入栈序列
        }
        
        for (int i = 0; i < n; ++i) {
            cin >> popped[i];  // 出栈序列
        }
        
        // 判断是否能根据入栈序列生成出栈序列
        cout << canPopSequence(n, pushed, popped) << endl;
    }
    
    return 0;
}
